Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/SettingsViewModel.kt f4506450168d047b225b277620bf0f1d5dcd13b5 (f4506450) Text, 11.61 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.settings

Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.flatMapLatest
Tff7b72import T7ee787kotlinx.coroutines.flow.flowOf
Tff7b72import T7ee787kotlinx.coroutines.flow.map
Tff7b72import T7ee787okio.BufferedSink
Tff7b72import T7ee787org.koin.core.annotation.KoinViewModel
Tff7b72import T7ee787org.meshtastic.core.common.BuildConfigProvider
Tff7b72import T7ee787org.meshtastic.core.common.database.DatabaseManager
Tff7b72import T7ee787org.meshtastic.core.common.state.HiddenFeaturesUnlock
Tff7b72import T7ee787org.meshtastic.core.common.util.CommonUri
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ExportDataUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ExportNodeDatabaseUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.IsOtaCapableUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetMeshLogSettingsUseCase
Tff7b72import T7ee787org.meshtastic.core.model.ConnectionState
Tff7b72import T7ee787org.meshtastic.core.model.MyNodeInfo
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeListDensity
Tff7b72import T7ee787org.meshtastic.core.repository.FileService
Tff7b72import T7ee787org.meshtastic.core.repository.MeshLogPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.core.repository.NotificationPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioController
Tff7b72import T7ee787org.meshtastic.core.repository.UiPrefs
Tff7b72import T7ee787org.meshtastic.core.ui.viewmodel.safeLaunch
Tff7b72import T7ee787org.meshtastic.core.ui.viewmodel.stateInWhileSubscribed
Tff7b72import T7ee787org.meshtastic.proto.LocalConfig

Tf0883e@KoinViewModel
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4)
Tff7b72class T56d364SettingsViewModelTb4b4b4(
Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioControllerTb4b4b4: Te6edf3RadioControllerTb4b4b4,
Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3uiPrefsTb4b4b4: Te6edf3UiPrefsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3buildConfigProviderTb4b4b4: Te6edf3BuildConfigProviderTb4b4b4,
Tff7b72private Tff7b72val Te6edf3databaseManagerTb4b4b4: Te6edf3DatabaseManagerTb4b4b4,
Tff7b72private Tff7b72val Te6edf3meshLogPrefsTb4b4b4: Te6edf3MeshLogPrefsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3notificationPrefsTb4b4b4: Te6edf3NotificationPrefsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3setMeshLogSettingsUseCaseTb4b4b4: Te6edf3SetMeshLogSettingsUseCaseTb4b4b4,
Tff7b72private Tff7b72val Te6edf3exportDataUseCaseTb4b4b4: Te6edf3ExportDataUseCaseTb4b4b4,
Tff7b72private Tff7b72val Te6edf3exportNodeDatabaseUseCaseTb4b4b4: Te6edf3ExportNodeDatabaseUseCaseTb4b4b4,
Tff7b72private Tff7b72val Te6edf3isOtaCapableUseCaseTb4b4b4: Te6edf3IsOtaCapableUseCaseTb4b4b4,
Tff7b72private Tff7b72val Te6edf3fileServiceTb4b4b4: Te6edf3FileServiceTb4b4b4,
Tff7b72private Tff7b72val Te6edf3hiddenFeaturesUnlockTb4b4b4: Te6edf3HiddenFeaturesUnlockTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3myNodeInfoTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3MyNodeInfo?Tff7b72> Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfo

Tff7b72val Te6edf3myNodeNum
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3myNodeNum

Tff7b72val Te6edf3ourNodeInfoTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3Node?Tff7b72> Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3ourNodeInfo

Tff7b72val Te6edf3isConnected Tff7b72=
Te6edf3radioControllerTb4b4b4.Te6edf3connectionState
Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657it Tff7b72is Te6edf3ConnectionStateTb4b4b4.Te6edf3Connected Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Tff7b72falseTb4b4b4)

Tff7b72val Te6edf3localConfigTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3LocalConfigTff7b72> Tff7b72=
Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3localConfigFlowTb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3LocalConfigTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3provideLocationTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657BooleanTff7b72> Tff7b72=
Te6edf3myNodeInfo
Tb4b4b4.Te6edf3flatMapLatest Tb4b4b4{ Te6edf3myNodeEntity Tff7b72-Tff7b72>
T8b949e// When myNodeInfo changes, set up emissions for the "provide-location-nodeNum" pref.
Tff7b72if Tb4b4b4(Te6edf3myNodeEntity Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3flowOfTb4b4b4(Tff7b72falseTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3uiPrefsTb4b4b4.Te6edf3shouldProvideNodeLocationTb4b4b4(Te6edf3myNodeEntityTb4b4b4.Te6edf3myNodeNumTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Tff7b72falseTb4b4b4)

Tff7b72fun Td2a8ffstartProvidingLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3radioControllerTb4b4b4.Te6edf3startProvideLocationTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffstopProvidingLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3radioControllerTb4b4b4.Te6edf3stopProvideLocationTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e// Process-scoped shared state so other features (e.g. the nightly firmware channel) see the same unlock.
Tff7b72val Te6edf3hiddenFeaturesUnlockedTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657BooleanTff7b72> Tff7b72= Te6edf3hiddenFeaturesUnlockTb4b4b4.Te6edf3unlocked

Tff7b72val Te6edf3appVersionName
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3buildConfigProviderTb4b4b4.Te6edf3versionName

Tff7b72val Te6edf3isOtaCapableTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657BooleanTff7b72> Tff7b72= Te6edf3isOtaCapableUseCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Tff7b72falseTb4b4b4)

T8b949e// Device DB cache limit (bounded by DatabaseConstants)
Tff7b72val Te6edf3dbCacheLimitTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657IntTff7b72> Tff7b72= Te6edf3databaseManagerTb4b4b4.Te6edf3cacheLimit

Tff7b72fun Td2a8ffsetDbCacheLimitTb4b4b4(Te6edf3limitTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3databaseManagerTb4b4b4.Te6edf3setCacheLimitTb4b4b4(Te6edf3limitTb4b4b4)
Tb4b4b4}

T8b949e// Notifications
Tff7b72val Te6edf3messagesEnabled Tff7b72= Te6edf3notificationPrefsTb4b4b4.Te6edf3messagesEnabled
Tff7b72val Te6edf3nodeEventsEnabled Tff7b72= Te6edf3notificationPrefsTb4b4b4.Te6edf3nodeEventsEnabled
Tff7b72val Te6edf3lowBatteryEnabled Tff7b72= Te6edf3notificationPrefsTb4b4b4.Te6edf3lowBatteryEnabled

Tff7b72fun Td2a8ffsetMessagesEnabledTb4b4b4(Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3notificationPrefsTb4b4b4.Te6edf3setMessagesEnabledTb4b4b4(Te6edf3enabledTb4b4b4)

Tff7b72fun Td2a8ffsetNodeEventsEnabledTb4b4b4(Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3notificationPrefsTb4b4b4.Te6edf3setNodeEventsEnabledTb4b4b4(Te6edf3enabledTb4b4b4)

Tff7b72fun Td2a8ffsetLowBatteryEnabledTb4b4b4(Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3notificationPrefsTb4b4b4.Te6edf3setLowBatteryEnabledTb4b4b4(Te6edf3enabledTb4b4b4)

T8b949e// MeshLog retention period (bounded by MeshLogPrefsImpl constants)
Tff7b72private Tff7b72val Te6edf3_meshLogRetentionDays Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3meshLogPrefsTb4b4b4.Te6edf3retentionDaysTb4b4b4.Te6edf3valueTb4b4b4)
Tff7b72val Te6edf3meshLogRetentionDaysTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657IntTff7b72> Tff7b72= Te6edf3_meshLogRetentionDaysTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3_meshLogLoggingEnabled Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3meshLogPrefsTb4b4b4.Te6edf3loggingEnabledTb4b4b4.Te6edf3valueTb4b4b4)
Tff7b72val Te6edf3meshLogLoggingEnabledTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657BooleanTff7b72> Tff7b72= Te6edf3_meshLogLoggingEnabledTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)

Tff7b72fun Td2a8ffsetMeshLogRetentionDaysTb4b4b4(Te6edf3daysTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3safeLaunchTb4b4b4(Te6edf3tag Tff7b72= Ta5d6ff"Ta5d6ffsetMeshLogRetentionDaysTa5d6ff"Tb4b4b4) Tb4b4b4{ Te6edf3setMeshLogSettingsUseCaseTb4b4b4.Te6edf3setRetentionDaysTb4b4b4(Te6edf3daysTb4b4b4) Tb4b4b4}
Te6edf3_meshLogRetentionDaysTb4b4b4.Te6edf3value Tff7b72= Te6edf3daysTb4b4b4.Te6edf3coerceInTb4b4b4(Te6edf3MeshLogPrefsTb4b4b4.Te6edf3MIN_RETENTION_DAYSTb4b4b4, Te6edf3MeshLogPrefsTb4b4b4.Te6edf3MAX_RETENTION_DAYSTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffsetMeshLogLoggingEnabledTb4b4b4(Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3safeLaunchTb4b4b4(Te6edf3tag Tff7b72= Ta5d6ff"Ta5d6ffsetMeshLogLoggingEnabledTa5d6ff"Tb4b4b4) Tb4b4b4{ Te6edf3setMeshLogSettingsUseCaseTb4b4b4.Te6edf3setLoggingEnabledTb4b4b4(Te6edf3enabledTb4b4b4) Tb4b4b4}
Te6edf3_meshLogLoggingEnabledTb4b4b4.Te6edf3value Tff7b72= Te6edf3enabled
Tb4b4b4}

Tff7b72fun Td2a8ffsetProvideLocationTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3myNodeNumTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldProvideNodeLocationTb4b4b4(Tffa657itTb4b4b4, Te6edf3valueTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffsetThemeTb4b4b4(Te6edf3themeTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3uiPrefsTb4b4b4.Te6edf3setThemeTb4b4b4(Te6edf3themeTb4b4b4)
Tb4b4b4}

Tff7b72val Te6edf3showFullMessageTimestamps Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3showFullMessageTimestamps

Tff7b72fun Td2a8ffsetShowFullMessageTimestampsTb4b4b4(Te6edf3showTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3uiPrefsTb4b4b4.Te6edf3setShowFullMessageTimestampsTb4b4b4(Te6edf3showTb4b4b4)
Tb4b4b4}

T8b949e/** Set the application locale. Empty string means system default. */
Tff7b72fun Td2a8ffsetLocaleTb4b4b4(Te6edf3languageTagTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3uiPrefsTb4b4b4.Te6edf3setLocaleTb4b4b4(Te6edf3languageTagTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffshowAppIntroTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3uiPrefsTb4b4b4.Te6edf3setAppIntroCompletedTb4b4b4(Tff7b72falseTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffunlockHiddenFeaturesTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3hiddenFeaturesUnlockTb4b4b4.Te6edf3unlockTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e/**
* Export all persisted packet data to a CSV file at the given URI.
*
* @param uri The destination URI for the CSV file.
* @param filterPortnum If provided, only packets with this port number will be exported.
*/
Tff7b72fun Td2a8ffsaveDataCsvTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3CommonUriTb4b4b4, Te6edf3filterPortnumTb4b4b4: Tffa657Int? Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3safeLaunchTb4b4b4(Te6edf3tag Tff7b72= Ta5d6ff"Ta5d6ffsaveDataCsvTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3fileServiceTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3uriTb4b4b4) Tb4b4b4{ Te6edf3writer Tff7b72-Tff7b72> Te6edf3performDataExportTb4b4b4(Te6edf3writerTb4b4b4, Te6edf3filterPortnumTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffperformDataExportTb4b4b4(Te6edf3writerTb4b4b4: Te6edf3BufferedSinkTb4b4b4, Te6edf3filterPortnumTb4b4b4: Tffa657Int?Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3myNodeNum Tff7b72= Te6edf3myNodeNum Tff7b72?: Tff7b72return
Te6edf3exportDataUseCaseTb4b4b4(Te6edf3writerTb4b4b4, Te6edf3myNodeNumTb4b4b4, Te6edf3filterPortnumTb4b4b4)
Tb4b4b4}

T8b949e/** Export the current device's node database as a JSON file at the given URI. */
Tff7b72fun Td2a8ffsaveNodeDbJsonTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3CommonUriTb4b4b4) Tb4b4b4{
Te6edf3safeLaunchTb4b4b4(Te6edf3tag Tff7b72= Ta5d6ff"Ta5d6ffsaveNodeDbJsonTa5d6ff"Tb4b4b4) Tb4b4b4{ Te6edf3fileServiceTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3uriTb4b4b4) Tb4b4b4{ Te6edf3sink Tff7b72-Tff7b72> Te6edf3exportNodeDatabaseUseCaseTb4b4b4(Te6edf3sinkTb4b4b4) Tb4b4b4} Tb4b4b4}
Tb4b4b4}

T8b949e// Node list layout preferences
Tff7b72val Te6edf3nodeListDensity Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3nodeListDensity
Tff7b72val Te6edf3shouldShowPower Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowPower
Tff7b72val Te6edf3shouldShowLastHeard Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowLastHeard
Tff7b72val Te6edf3lastHeardIsRelative Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3lastHeardIsRelative
Tff7b72val Te6edf3shouldShowLocation Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowLocation
Tff7b72val Te6edf3shouldShowHops Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowHops
Tff7b72val Te6edf3shouldShowSignal Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowSignal
Tff7b72val Te6edf3shouldShowChannel Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowChannel
Tff7b72val Te6edf3shouldShowRole Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowRole
Tff7b72val Te6edf3shouldShowTelemetry Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3shouldShowTelemetry

Tff7b72fun Td2a8ffsetNodeListDensityTb4b4b4(Te6edf3valueTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setNodeListDensityTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowPowerTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowPowerTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowLastHeardTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowLastHeardTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetLastHeardIsRelativeTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setLastHeardIsRelativeTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowLocationTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowLocationTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowHopsTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowHopsTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowSignalTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowSignalTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowChannelTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowChannelTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowRoleTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowRoleTb4b4b4(Te6edf3valueTb4b4b4)

Tff7b72fun Td2a8ffsetShouldShowTelemetryTb4b4b4(Te6edf3valueTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3setShouldShowTelemetryTb4b4b4(Te6edf3valueTb4b4b4)

T8b949e// Aggregated node list settings — nested combines because typed overloads max at 5 args
Tff7b72val Te6edf3nodeListSettings Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3combineTb4b4b4(
Te6edf3nodeListDensityTb4b4b4,
Te6edf3shouldShowPowerTb4b4b4,
Te6edf3shouldShowLastHeardTb4b4b4,
Te6edf3lastHeardIsRelativeTb4b4b4,
Te6edf3shouldShowLocationTb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3densityTb4b4b4, Te6edf3powerTb4b4b4, Te6edf3lastHeardTb4b4b4, Te6edf3heardRelativeTb4b4b4, Te6edf3location Tff7b72-Tff7b72>
Te6edf3NodeListSettingsStateTb4b4b4(
Te6edf3density Tff7b72= Te6edf3NodeListDensityTb4b4b4.Te6edf3fromNameTb4b4b4(Te6edf3densityTb4b4b4)Tb4b4b4,
Te6edf3showPower Tff7b72= Te6edf3powerTb4b4b4,
Te6edf3showLastHeard Tff7b72= Te6edf3lastHeardTb4b4b4,
Te6edf3lastHeardIsRelative Tff7b72= Te6edf3heardRelativeTb4b4b4,
Te6edf3showLocation Tff7b72= Te6edf3locationTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3combineTb4b4b4(Te6edf3shouldShowHopsTb4b4b4, Te6edf3shouldShowSignalTb4b4b4, Te6edf3shouldShowChannelTb4b4b4, Te6edf3shouldShowRoleTb4b4b4, Te6edf3shouldShowTelemetryTb4b4b4) Tb4b4b4{
Te6edf3hopsTb4b4b4,
Te6edf3signalTb4b4b4,
Te6edf3channelTb4b4b4,
Te6edf3roleTb4b4b4,
Te6edf3telemetryTb4b4b4,
Tff7b72-Tff7b72>
Te6edf3NodeListSettingsStateTb4b4b4(
Te6edf3showHops Tff7b72= Te6edf3hopsTb4b4b4,
Te6edf3showSignal Tff7b72= Te6edf3signalTb4b4b4,
Te6edf3showChannel Tff7b72= Te6edf3channelTb4b4b4,
Te6edf3showRole Tff7b72= Te6edf3roleTb4b4b4,
Te6edf3showTelemetry Tff7b72= Te6edf3telemetryTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3firstTb4b4b4, Te6edf3second Tff7b72-Tff7b72>
Te6edf3firstTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3showHops Tff7b72= Te6edf3secondTb4b4b4.Te6edf3showHopsTb4b4b4,
Te6edf3showSignal Tff7b72= Te6edf3secondTb4b4b4.Te6edf3showSignalTb4b4b4,
Te6edf3showChannel Tff7b72= Te6edf3secondTb4b4b4.Te6edf3showChannelTb4b4b4,
Te6edf3showRole Tff7b72= Te6edf3secondTb4b4b4.Te6edf3showRoleTb4b4b4,
Te6edf3showTelemetry Tff7b72= Te6edf3secondTb4b4b4.Te6edf3showTelemetryTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3NodeListSettingsStateTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e/** Aggregated state for node list display settings to reduce recomposition overhead. */
Tff7b72data Tff7b72class T56d364NodeListSettingsStateTb4b4b4(
Tff7b72val Te6edf3densityTb4b4b4: Te6edf3NodeListDensity Tff7b72= Te6edf3NodeListDensityTb4b4b4.Te6edf3COMPLETETb4b4b4,
Tff7b72val Te6edf3showPowerTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showLastHeardTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3lastHeardIsRelativeTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showLocationTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showHopsTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showSignalTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showChannelTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showRoleTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showTelemetryTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)

Served by rngit 1.5.0 - Generated in 0.09s